HTML 中,标签的层级关系就是树,<html>
是根节点。CSS 继承是指从父元素那继承部分 CSS 属性。
应该类似父类和子类的关系吧,只不过这个类只用来描述 View 的 UI 元素。
比如下面的代码:
|
|
我们没有描述 <span>
的样式,继承
两个字也变成红色,用面向对象来理解,应该是这样的:
|
|
CSS 的继承关系是比较弱的,子元素不一定会继承父元素所有的属性。
CSS 层叠可以定义多个样式,不冲突时,多个样式可以层叠为一个,冲突时,按照不同样式规则优先级来应用样式。
CSS 层叠类似子类重写和添加属性吧。CSS 的继承和层叠和面向对象的继承和多态感觉差不多。
CSS 权值
类型 | 权值 |
---|---|
行内样式 | 1000 |
id 选择器 | 100 |
class 选择器和伪类 | 10 |
标签选择器 | 1 |
通配符选择器 | 0 |
继承 | 无权值,有任意声明都会被覆盖。 |
权值计算
以 #main div.warning h2 {...}
举例:
类型 | 符名 | 权重 |
---|---|---|
id | #main |
100 |
标签 | div |
1 |
class | warning |
10 |
标签 | h2 |
1 |
因此它的权值是 112。
比较原则
1,0,0,0 > 0,99,99,99
,也就是说从左往右逐个等级比较,前一等级相等才往后比,无论是行间、内部和外部样式,都是按照这个规则来进行比较。而不是直观的 行间 > 内部 > 外部样式
,id > class > 元素
。之所以有这样的错觉,是因为确实行间为第一等的权重,所以它的权重是最高的,而内部样式可能一般写在了外部样式引用了之后,所以覆盖掉了之前的。
同样权值的样式,后声明的样式会覆盖先声明的样式。
调整优先级
|
|
!importrtant
关键字可以使样式的权重提升到无限大,通过 !important
声明的样式,会覆盖所有冲突样式。
CSS 优先级
之前我们学习过,CSS 的优先级 行内样式 > 内部样式 > 外部样式
,其中 <link>
和 @import
的优先级取决于位置的先后,最后定义的优先级最高,也就是就近原则。
那么元素选择器、class 选择器、id 选择器、全局选择器,群组选择器、后代选择器,这几种选择器的优先级又是怎样的呢?
|
|
通过上面的代码,我们可以得出结论:
|
|
我们之前学习过,id 和 HTML 元素是一一对应的,但多个元素可以使用一个 class,一个元素也可以使用多个 class,因此 id 距离元素“更近”。
一个元素同时继承多个 class 发生冲突时,后定义的 class 会覆盖之前的 class。